home *** CD-ROM | disk | FTP | other *** search
- unit UnitFormMain;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- UnitMulticaster, StdCtrls;
-
- type
-
- TEventAfterChange = class(TEvent);
- TStringObject = class(TComponent)
- private
- FValue: string;
- FMulticaster: TEventMulticaster;
- procedure SetValue(const aValue: string);
- public
- constructor Create(Owner: TComponent);
- destructor Destroy; override;
- property Multicaster: TEventMulticaster read FMulticaster;
- property Value: string read FValue write SetValue;
- end;
-
- TFormMain = class(TForm)
- Edit1: TEdit;
- Button1: TButton;
- Label1: TLabel;
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure Edit1Change(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- private
- FMulticaster: TEventMulticaster;
- FUserName: TStringObject;
- public
- public property UserName: TStringObject read FUserName;
- property Multicaster: TEventMulticaster read FMulticaster;
- end;
- TEventUserNameChange = class(TEvent);
-
- var
- FormMain: TFormMain;
-
- implementation
-
- {$R *.DFM}
-
- uses UnitFormListener;
-
- procedure TFormMain.FormCreate(Sender: TObject);
- begin
- FMulticaster := TEventMulticaster.Create;
- FUserName := TStringObject.Create(Self);
- end;
-
- procedure TFormMain.FormDestroy(Sender: TObject);
- begin
- FMulticaster.Free;
- end;
-
- procedure TFormMain.Edit1Change(Sender: TObject);
- begin
- UserName.Value := Edit1.Text;
- end;
-
- procedure TFormMain.Button1Click(Sender: TObject);
- begin
- TFormListener.Create(Self).Show;
- end;
-
- { TStringObject }
-
- constructor TStringObject.Create(Owner: TComponent);
- begin
- inherited;
- FMulticaster := TEventMulticaster.Create;
- FValue := '';
- end;
-
- destructor TStringObject.Destroy;
- begin
- FMulticaster.Destroy;
- inherited;
- end;
-
- procedure TStringObject.SetValue(const aValue: string);
- begin
- if (aValue <> Value) then
- begin
- FValue := aValue;
- Multicaster.Broadcast(TEventAfterChange.Create(Self));
- end; // then begin
- end;
-
- end.
-